package com.demons.springboot2.demons.config;

import com.demons.springboot2.demons.web.Car;
import com.demons.springboot2.demons.web.User;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.*;
import sun.plugin.dom.DOMObjectHelper;

/**
 * 1、 配置类里面使用@Bean标注在方法上给容器注册组件，默认是单实例的
 * 2、配置类本身也是一个组件
 * 3、proxyBeanMethods：代理bean的方法
 *
 * @Import({User.class, DOMObjectHelper.class)
 *        给容器中自动创建出这两个类型的组件,默认组件的名字就是全类名
 *        com.demons.springboot2.demos.web.User
 *        sun.plugin.dom.DOMObjectHelper@726a6b94
 *
 * 4、@Conditional 条件装配，只有满足某些条件后，才会将bean注册到容器当中
 *      这里面有很多具体可以点开查看
 *      例如 @ConditionalOnBean(name="tom") 只有存在tom这个组件 user才会被装配
 *
 * 5、@ImportResource("classpath:bean.xml")
 *      老项目不想使用@Bean方式注入bean
 *      可以使用@ImportResource将之前的xml文件导入
 */

@Import({User.class, DOMObjectHelper.class})
@Configuration(proxyBeanMethods = true)//告诉spring这是一个配置类 == 配置文件
@ImportResource("classpath:bean.xml")
@EnableConfigurationProperties(Car.class)
//1、开启car的属性配置功能 @EnableConfigurationProperties还能将组件自动注入到容器当中，就不需要@Compoent注解了
public class Myconfig {

    /*
    外部无论对配置类中这个组件注册方法调用多少次，获取的都是之前注册容器中的单实例对象
     */
//    @ConditionalOnBean(name="tom")
//    @Bean//给容器中添加组件。以方法名作为组件id，返回类型就是组件类型、
//    public User user(){
//        return new User("zhangsan",18);
//    }
}
